package com.fdb.efp.nls.service.impl;

import com.fdb.basic.framework.core.base.FrameworkService;
import com.fdb.efp.nls.service.dao.AccoutErroTempDao;
import com.fdb.efp.nls.service.domain.AccoutErroTemp;
import com.fdb.efp.nls.service.facade.AccoutErroTempService;
import com.fdb.efp.nls.service.vo.AccoutErroTempVO;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;

@Service("accoutErroTempService")
public class AccoutErroTempServiceImpl implements AccoutErroTempService, FrameworkService {
	private static Logger logger = LoggerFactory.getLogger(AccoutErroTempServiceImpl.class);

	@Autowired
	private AccoutErroTempDao accoutErroTempDao;

	/**
	 * 新增操作
	 */
	public int insert(AccoutErroTempVO accoutErroTempVO) {// vo
		logger.debug("当前新增数据为:" + accoutErroTempVO.toString());
		int num = 0;
		try {
			AccoutErroTemp accoutErroTemp = new AccoutErroTemp();
			beanCopy(accoutErroTempVO, accoutErroTemp);
			num = accoutErroTempDao.insert(accoutErroTemp);
		} catch (Exception e) {
			logger.error("新增数据发生异常!", e);
			num = -1;
		}
		logger.debug("当前新增数据条数为:" + num);
		return num;
	}

	/**
	 * 同步文件记录异常信息
	 * 
	 * @description:TODO
	 * @param tableName
	 *            操作的表名
	 * @param erroMsg
	 *            错误信息
	 * @param tempTotal
	 *            列表的数据
	 * @param acountTotal
	 *            对账表的数据
	 * @param type
	 *            默认1为对账 解析过程出错传“0”
	 * @param updateDelInster修改
	 *            删除 新增 操作
	 * @param no异常的编号
	 * @param eMsg异常信息
	 * @date:2019年1月3日 下午7:56:47
	 * @author:cenyj
	 */
	public void accountErroMsg(String tableName, String erroMsg, String tempTotal, String acountTotal, String type, String updateDelInster,
			String no, String eMsg) {
		try {
			// 如果条数不一样，则记录到erro_msg表
			AccoutErroTemp erroMsgModel = new AccoutErroTemp();
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
			String currDate = sdf.format(new Date());
			String remark = "";
			String erroMsgs = erroMsg;
			if (type.equals("0") ) {
				erroMsgs = "日终批量" + updateDelInster + "";
				remark = updateDelInster + ",编号为" + no + "出错,出错信息：" + eMsg + "!";// 日终批量删/修改/新增除出错 编号为123456，e.msg
			} else if (type.equals("3")) {
				erroMsgs = "日终批量并账文件";
				remark = "更新并账文件出错" + eMsg;
			} else {// type == "1"
				remark = "同步过来的临时表数据:" + tempTotal + ";" + "对账表记录:" + acountTotal + "!";
			}
			erroMsgModel.setErroMsg(erroMsgs);
			erroMsgModel.setRemark(remark);
			erroMsgModel.setTableName(tableName);
			erroMsgModel.setCreateData(currDate);
			accoutErroTempDao.insert(erroMsgModel);
		} catch (Exception e) {
			logger.error("日终批量记录异常信息时出错！");
		}
	}

	/**
	 * 
	 * 通过错误类别、处理状态查询待处理的错误信息
	 * 
	 * @param states
	 * @return
	 * @author ludayong
	 * @since 2019年1月26日 下午4:49:12
	 * @version 1.0
	 */
	@Override
	public List<AccoutErroTempVO> queryByErrorTypeStates(String erroType, List<String> states) {
		logger.debug("当前查询本人所属数据信息的参数信息为:");
		List<AccoutErroTempVO> list = null;
		try {
			List<AccoutErroTemp> accoutErroTemps = accoutErroTempDao.queryByErroTypeStates(erroType, states);
			logger.debug("当前查询本人所属数据信息的结果集数量为:" + accoutErroTemps.size());
			list = (List<AccoutErroTempVO>) beansCopy(accoutErroTemps, AccoutErroTempVO.class);
		} catch (Exception e) {
			logger.error("数据转换出现异常!", e);
		}
		return list;
	}

	/**
	 * 
	 * 通过处理状态查询待处理的错误信息
	 * 
	 * @param states
	 * @return
	 * @author ludayong
	 * @since 2019年1月26日 下午4:49:12
	 * @version 1.0
	 */
	@Override
	public List<AccoutErroTempVO> queryByStates(List<String> states) {
		logger.debug("当前查询本人所属数据信息的参数信息为:");
		List<AccoutErroTempVO> list = null;
		try {
			List<AccoutErroTemp> accoutErroTemps = accoutErroTempDao.queryByStates(states);
			logger.debug("当前查询本人所属数据信息的结果集数量为:" + accoutErroTemps.size());
			list = (List<AccoutErroTempVO>) beansCopy(accoutErroTemps, AccoutErroTempVO.class);
		} catch (Exception e) {
			logger.error("数据转换出现异常!", e);
		}
		return list;
	}
	
	/**
	 * 
	 * 通过主键更新处理状态
	 * 
	 * @param map
	 * @return
	 * @author ludayong
	 * @since 2019年1月26日 下午4:48:59
	 * @version 1.0
	 */
	@Override
	public int updateStateBySernos(Map<String, Object> map) {
		logger.debug("当前查询参数信息为:" + map.toString());
		int num = 0;
		try {
			num = accoutErroTempDao.updateStateBySernos(map);
		} catch (Exception e) {
			logger.error("查询信息发生异常!", e);
			num = -1;
		}
		logger.debug("当前查询条数为:" + num);
		return num;
	}
}
